package com.shuziren.service.Impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.shuziren.abnormal.CustomException;
import com.shuziren.domain.CandidateEntity;
import com.shuziren.domain.InterPersonEntity;
import com.shuziren.domain.dto.InterPersonAddDto;
import com.shuziren.domain.dto.InterPersonSelectDto;
import com.shuziren.domain.dto.InterPersonUpdateDto;
import com.shuziren.mapper.InterPersonMapper;
import com.shuziren.service.InterPersonService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.stereotype.Service;

@Service
public class InterPersonServiceImpl extends ServiceImpl<InterPersonMapper, InterPersonEntity> implements InterPersonService {
    @Autowired
    private InterPersonMapper interPersonMapper;
    @Override
    public Page<InterPersonEntity> selectPage(InterPersonSelectDto interPersonDto) {
        // 参数校验
        validateCandidateDto(interPersonDto);
        interPersonDto.setPageNum(interPersonDto.getPageNum() == null ? 1 : interPersonDto.getPageNum());

        interPersonDto.setPageSize(interPersonDto.getPageSize() == null ? 10 : interPersonDto.getPageSize());
        InterPersonEntity interPerson = new InterPersonEntity();
        BeanUtils.copyProperties(interPersonDto, interPerson);

        Page<InterPersonEntity> pageParam = new Page<>(interPersonDto.getPageNum(), interPersonDto.getPageSize());
        QueryWrapper<InterPersonEntity> interPersonEntityQueryWrapper = new QueryWrapper<>();
        if (interPerson.getName() != null && !interPerson.getName().isBlank()){
            interPersonEntityQueryWrapper.like("name", interPerson.getName());
        }
        if (interPerson.getStatus() != null && interPerson.getStatus() != 0){
            interPersonEntityQueryWrapper.eq("status", interPerson.getStatus());
        }
        if (interPerson.getExpertise() != null && !interPerson.getExpertise().isBlank()){
            interPersonEntityQueryWrapper.like("expertise", interPerson.getExpertise());
        }

        // 执行查询
        return interPersonMapper.selectPage(pageParam, interPersonEntityQueryWrapper);
    }

    @Override
    public boolean addInterPerson(InterPersonAddDto interPersonAddDto) {
        if (interPersonAddDto != null) {
            InterPersonEntity interPerson = new InterPersonEntity();
            interPerson.setName(interPersonAddDto.getName());
            interPerson.setRole(interPersonAddDto.getRole());
            interPerson.setEmail(interPersonAddDto.getEmail());
            interPerson.setExpertise(interPersonAddDto.getExpertise());
            interPerson.setSkills(interPersonAddDto.getSkills());
            interPerson.setStatus(interPersonAddDto.getStatus());
            interPerson.setNotes(interPersonAddDto.getNotes());
            interPerson.setAvatar(interPersonAddDto.getAvatar());
            interPerson.setVideoPath(interPersonAddDto.getVideoPath());
            interPerson.setPersonality(interPersonAddDto.getPersonality());
            interPerson.setPromptTemplate(interPersonAddDto.getPromptTemplate());
            interPerson.setTemperature(interPersonAddDto.getTemperature());
            try{
                int result = interPersonMapper.insert(interPerson);
                return result > 0;
            }catch (DuplicateKeyException e){
                throw new CustomException("插入面试官信息失败:名称重复");
            }
        }
        return false;
    }

    @Override
    public boolean updateInterPerson(InterPersonUpdateDto interPersonUpdateDto) {
        if (interPersonUpdateDto == null || interPersonUpdateDto.getId() == null) {
            throw new IllegalArgumentException("更新对象不能为空且必须包含有效的ID");
        }

        // 检查记录是否存在
        InterPersonEntity interPersonEntity = interPersonMapper.selectById(interPersonUpdateDto.getId());
        if (interPersonEntity == null) {
            throw new IllegalArgumentException("要更新的记录不存在");
        }

        // 设置各个字段
        interPersonEntity.setName(isEmpty(interPersonUpdateDto.getName()) ? interPersonEntity.getName() : interPersonUpdateDto.getName());
        interPersonEntity.setRole(isEmpty(interPersonUpdateDto.getRole()) ? interPersonEntity.getRole() : interPersonUpdateDto.getRole());
        interPersonEntity.setEmail(isEmpty(interPersonUpdateDto.getEmail()) ? interPersonEntity.getEmail() : interPersonUpdateDto.getEmail());
        interPersonEntity.setExpertise(isEmpty(interPersonUpdateDto.getExpertise()) ? interPersonEntity.getExpertise() : interPersonUpdateDto.getExpertise());
        interPersonEntity.setSkills(isEmpty(interPersonUpdateDto.getSkills()) ? interPersonEntity.getSkills() : interPersonUpdateDto.getSkills());
        interPersonEntity.setStatus(interPersonUpdateDto.getStatus() != null && interPersonUpdateDto.getStatus() != 0 ? interPersonUpdateDto.getStatus() : interPersonEntity.getStatus());
        interPersonEntity.setNotes(isEmpty(interPersonUpdateDto.getNotes()) ? interPersonEntity.getNotes() : interPersonUpdateDto.getNotes());
        interPersonEntity.setAvatar(isEmpty(interPersonUpdateDto.getAvatar()) ? interPersonEntity.getAvatar() : interPersonUpdateDto.getAvatar());
        interPersonEntity.setVideoPath(isEmpty(interPersonUpdateDto.getVideoPath()) ? interPersonEntity.getVideoPath() : interPersonUpdateDto.getVideoPath());
        interPersonEntity.setPersonality(isEmpty(interPersonUpdateDto.getPersonality()) ? interPersonEntity.getPersonality() : interPersonUpdateDto.getPersonality());
        interPersonEntity.setPromptTemplate(isEmpty(interPersonUpdateDto.getPromptTemplate()) ? interPersonEntity.getPromptTemplate() : interPersonUpdateDto.getPromptTemplate());
        interPersonEntity.setTemperature(interPersonUpdateDto.getTemperature() != null && interPersonUpdateDto.getTemperature() != 0 ? interPersonUpdateDto.getTemperature() : interPersonEntity.getTemperature());

        // 执行更新操作
        int result = interPersonMapper.updateById(interPersonEntity);

        // 返回更新结果
        return result > 0;

    }


    private boolean isEmpty(String str) {
        return str == null || str.isEmpty();
    }

    /**
     * 校验 InterPersonDto 参数
     */
    private void validateInterPersonDto(InterPersonSelectDto interPersonDto) {
        if (interPersonDto == null) {
            throw new IllegalArgumentException("参数不能为空");
        }
        // 可以添加其他校验逻辑
    }
    /**
     * 校验CandidateDto参数
     */
    private void validateCandidateDto(InterPersonSelectDto interPersonDto) {
        if (interPersonDto == null) {
            throw new IllegalArgumentException("参数不能为空");
        }
    }

    /**
     * 构建查询条件
     */
    private LambdaQueryWrapper<InterPersonEntity> buildQueryWrapper(InterPersonSelectDto interPersonDto) {
        return new LambdaQueryWrapper<InterPersonEntity>()
                .like(InterPersonEntity::getName, interPersonDto.getName())
                .like(InterPersonEntity::getExpertise, interPersonDto.getExpertise());
    }
}
